home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Czech Logic, Card & Gambling Games
/
Logické hry.iso
/
hry
/
Fish Fillets
/
script
/
cancan
/
code.lua
next >
Wrap
Text File
|
2005-07-16
|
16KB
|
479 lines
-- -----------------------------------------------------------------
-- Init
-- -----------------------------------------------------------------
local function prog_init()
initModels()
local pokus = getRestartCount()
-- -------------------------------------------------------------
local function prog_init_room()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
room.druh = 1
end
-- -------------------------------------------------------------
local function prog_init_krab1()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
krab1.ceka = 10
krab1.krok = 0
return function()
krab1.muze = 0
krab2.muze = 0
krab3.muze = 0
krab4.muze = 0
if krab2.Y == krab1.Y and dist(krab1, krab2) == 1 then
krab1.muze = 1
krab2.muze = 1
end
if krab3.Y == krab1.Y and dist(krab1, krab3) == 1 then
krab1.muze = 1
krab3.muze = 1
end
if krab4.Y == krab1.Y and dist(krab1, krab4) == 1 then
krab1.muze = 1
krab4.muze = 1
end
if krab3.Y == krab2.Y and dist(krab2, krab3) == 1 then
krab2.muze = 1
krab3.muze = 1
end
if krab4.Y == krab2.Y and dist(krab2, krab4) == 1 then
krab2.muze = 1
krab4.muze = 1
end
if krab4.Y == krab3.Y and dist(krab3, krab4) == 1 then
krab3.muze = 1
krab4.muze = 1
end
if math.mod(game_getCycles(), 2) == 0 then
if krab1.krok == 7 then
krab1.krok = 0
else
krab1.krok = krab1.krok + 1
end
end
if krab1.ceka > 0 then
krab1.ceka = krab1.ceka - 1
end
if krab1.dir ~= dir_no or not klavir:isTalking() then
krab1.ceka = 20
end
if krab1.muze == 1 and krab1.ceka == 0 and klavir:isTalking() then
if room.druh == 0 then
if isIn(krab1.krok, {1, 3, 5, 7}) then
krab1.afaze = 7
elseif isIn(krab1.krok, {2, 4, 6, 0})then
krab1.afaze = 9
end
else
switch(krab1.krok){
[0] = function()
krab1.afaze = 6
end,
[2] = function()
krab1.afaze = 7
end,
[4] = function()
krab1.afaze = 8
end,
[6] = function()
krab1.afaze = 9
end,
default = function()
krab1.afaze = 0
end,
}
end
elseif krab1.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
krab1.afaze = random(6)
end
krab1:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_krab2()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
krab2.ceka = 20
return function()
if krab2.ceka > 0 then
krab2.ceka = krab2.ceka - 1
end
if krab2.dir ~= dir_no or not klavir:isTalking() then
krab2.ceka = 20
end
if krab2.muze == 1 and krab2.ceka == 0 and klavir:isTalking() then
if room.druh == 0 then
if isIn(krab1.krok, {1, 3, 5, 7}) then
krab2.afaze = 7
elseif isIn(krab1.krok, {2, 4, 6, 0})then
krab2.afaze = 9
end
else
switch(krab1.krok){
[0] = function()
krab2.afaze = 6
end,
[2] = function()
krab2.afaze = 7
end,
[4] = function()
krab2.afaze = 8
end,
[6] = function()
krab2.afaze = 9
end,
default = function()
krab2.afaze = 0
end,
}
end
elseif krab2.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
krab2.afaze = random(6)
end
krab2:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_krab3()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
krab3.ceka = 30
return function()
if krab3.ceka > 0 then
krab3.ceka = krab3.ceka - 1
end
if krab3.dir ~= dir_no or not klavir:isTalking() then
krab3.ceka = 20
end
if krab3.muze == 1 and krab3.ceka == 0 and klavir:isTalking() then
if room.druh == 0 then
if isIn(krab1.krok, {1, 3, 5, 7}) then
krab3.afaze = 7
elseif isIn(krab1.krok, {2, 4, 6, 0})then
krab3.afaze = 9
end
else
switch(krab1.krok){
[0] = function()
krab3.afaze = 6
end,
[2] = function()
krab3.afaze = 7
end,
[4] = function()
krab3.afaze = 8
end,
[6] = function()
krab3.afaze = 9
end,
default = function()
krab3.afaze = 0
end,
}
end
elseif krab3.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
krab3.afaze = random(6)
end
krab3:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_krab4()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
krab4.ceka = 40
return function()
if krab4.ceka > 0 then
krab4.ceka = krab4.ceka - 1
end
if krab4.dir ~= dir_no or not klavir:isTalking() then
krab4.ceka = 20
end
if krab4.muze == 1 and krab4.ceka == 0 and klavir:isTalking() then
if room.druh == 0 then
if isIn(krab1.krok, {1, 3, 5, 7}) then
krab4.afaze = 7
elseif isIn(krab1.krok, {2, 4, 6, 0})then
krab4.afaze = 9
end
else
switch(krab1.krok){
[0] = function()
krab4.afaze = 6
end,
[2] = function()
krab4.afaze = 7
end,
[4] = function()
krab4.afaze = 8
end,
[6] = function()
krab4.afaze = 9
end,
default = function()
krab4.afaze = 0
end,
}
end
elseif krab4.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then
krab4.afaze = random(6)
end
krab4:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_klavir()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
klavir.ruce = 0
klavir.otocka = -random(100) - 100
klavir.vyruseni = 0
return function()
if klavir.dir ~= dir_no then
klavir:killSound()
klavir.vyruseni = 20 + random(25)
end
if klavir.vyruseni > 0 then
if no_dialog() then
klavir.vyruseni = klavir.vyruseni - 1
if klavir.vyruseni == 0 then
klavir:talk("kan-klavir-music", VOLUME_LOW, -1)
end
end
if random(100) < 3 then
klavir.afaze = 8
else
klavir.afaze = 6
end
else
if not klavir:isTalking() then
klavir:talk("kan-klavir-music", VOLUME_LOW, -1)
end
if klavir.otocka > 0 and klavir.mrknuti > 0 then
if klavir.ruce == 0 then
klavir.ruce = 2
elseif klavir.ruce == 2 then
klavir.ruce = 0
else
klavir.ruce = random(2) * 2
end
klavir.afaze = 8 + math.floor(klavir.ruce / 2)
klavir.mrknuti = klavir.mrknuti - 1
klavir.otocka = klavir.otocka - 1
else
klavir.ruce = math.mod(klavir.ruce + random(3) + 1, 4)
if klavir.otocka > 0 then
klavir.afaze = 4 + klavir.ruce
if random(100) < 7 then
klavir.mrknuti = 1 + random(4)
end
klavir.otocka = klavir.otocka - 1
else
klavir.afaze = klavir.ruce
klavir.otocka = klavir.otocka + 1
if klavir.otocka == 0 then
klavir.otocka = random(10) + 50
klavir.mrknuti = 0
end
end
end
if klavir.otocka == 0 then
klavir.otocka = -random(300) - 150
end
end
klavir:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_sepie()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
sepie.mrk = 0
sepie.nohy = 0
return function()
pomb1 = sepie.dir == dir_down
pomb2 = isWater(sepie.X, sepie.Y + 1) and isWater(sepie.X + 1, sepie.Y + 1) and not isWater(sepie.X + 2, sepie.Y + 3)
if sepie.mrk > 0 then
sepie.mrk = sepie.mrk - 1
elseif random(100) < 15 then
sepie.mrk = random(3) + 2
end
if pomb1 or not pomb2 then
if odd(game_getCycles()) then
sepie.nohy = math.mod(sepie.nohy + 2 + random(2) * 2, 3)
end
sepie.afaze = sepie.nohy
if pomb1 then
sepie.afaze = sepie.nohy + 3
elseif sepie.mrk > 0 then
sepie.afaze = sepie.nohy + 6
else
sepie.afaze = sepie.nohy
end
else
if sepie.dir == dir_left or sepie.dir == dir_down then
sepie.nohy = math.mod(sepie.nohy + 1, 2)
else
sepie.nohy = 0
end
if sepie.mrk > 0 then
sepie.afaze = 2 * sepie.nohy + 10
else
sepie.afaze = 2 * sepie.nohy + 9
end
end
sepie:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_rejnok()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
rejnok.pozice = 0
rejnok.nespi = 0
return function()
if math.mod(game_getCycles(), 2) == 0 or rejnok.nespi > 20 then
if rejnok.pozice == 5 then
rejnok.pozice = 0
else
rejnok.pozice = rejnok.pozice + 1
end
if rejnok.dir ~= dir_no then
rejnok.nespi = random(60) + 20
end
if rejnok.nespi > 0 then
if random(100) < 13 then
rejnok.afaze = rejnok.pozice
else
rejnok.afaze = rejnok.pozice + 6
end
rejnok.nespi = rejnok.nespi - 1
else
rejnok.afaze = rejnok.pozice
end
end
rejnok:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_sasanka()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
sasanka.noha = 0
sasanka.kvet = 0
return function()
if isWater(sasanka.X, sasanka.Y - 1) then
local cycle = math.mod(game_getCycles(), 8)
if isIn(cycle, {0, 1, 2, 3}) then
sasanka.noha = 0
else
sasanka.noha = 1
end
if isIn(cycle, {0, 3, 4, 7}) then
sasanka.kvet = 1
else
sasanka.kvet = 0
end
sasanka.afaze = sasanka.noha * 4 + sasanka.kvet + 1
else
sasanka.afaze = 1
end
sasanka:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_big()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
big.ptalnyni = 0
return function()
if big.ptalnyni == 1 and klavir:isTalking() then
big.ptalnyni = 0
elseif big.ptalnyni == 0 and not klavir:isTalking() and random(1000) < 15 then
big.ptalnyni = 1
addv(3, "kan-v-proc")
end
end
end
-- --------------------
local update_table = {}
local subinit
subinit = prog_init_room()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_krab1()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_krab2()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_krab3()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_krab4()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_klavir()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_sepie()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_rejnok()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_sasanka()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_big()
if subinit then
table.insert(update_table, subinit)
end
return update_table
end
local update_table = prog_init()
-- -----------------------------------------------------------------
-- Update
-- -----------------------------------------------------------------
function prog_update()
for key, subupdate in pairs(update_table) do
subupdate()
end
end